import Vue from "vue";
import VueRouter from "vue-router";
import routes from './routes'
import store from '@/store/index'
Vue.use(VueRouter);
// import Home from "../pages/Home";
// import Login from "../pages/Login";
// import Register from "../pages/Register";
// import Search from "../pages/Search";
// import Detail from '../pages/Detail'

// 保存原有方法
let originPush = VueRouter.prototype.push;
let originReplace = VueRouter.prototype.replace;
//重写push、repalce
// 原因：不在这里重写push会出现多次点击后报NavigationDuplicated的错误
// 第一个参数告诉原来的方法你往哪里跳
VueRouter.prototype.push = function(lacation, resolve, reject) {
    if (resolve && reject) {
        //call||apply区别
        //相同点：都可以调用函数一次，都可以篡改函数的上下文一次
        //不同点：call与apply传递参数：call传递参数用逗号隔开，apply 方法执行，传递数组
        originPush.call(this, location, resolve, reject);
    } else {
        originPush.call(this, lacation, () => {}, () => {});
    }
};
VueRouter.prototype.replace = function(lacation, resolve, reject) {
    if (resolve && reject) {
        //call||apply区别
        //相同点：都可以调用函数一次，都可以篡改函数的上下文一次
        //不同点：call与apply传递参数：call传递参数用逗号隔开，apply 方法执行，传递数组
        originReplace.call(this, location, resolve, reject);
    } else {
        originReplace.call(
            this,
            lacation,
            () => {},
            () => {}
        );
    }
};
let router = new VueRouter({
    routes,
    // 滚动行为
    scrollBehavior(to, from, savedPosition) {

        return { y: 0 }
    }
});
// 全局前置守卫 在跳转之前判断
router.beforeEach(async(to, from, next) => {
    //用户登录了才会有token 未登录一定不会有token
    let token = store.state.user.token
        // 用户信息
    let name = store.state.user.userinfo.name
    if (token) {
        // 用户已经登录不可以去登录页面
        if (to.path == '/login') {
            next('/home')
        } else {
            // 登录了 去的不是login 去search  需要判断有没有用户信息 有就放行
            if (name) {
                next()
            } else {
                // 如果没有用户信息通知仓库actions存储用户信息再跳转
                try {
                    await store.dispatch('getUserInfo')
                    next()
                } catch (error) {
                    // token失效 清空token 清除用户数据重新登录
                    store.dispatch('userLogout')
                    next('/login')
                }
            }
        }
    } else {
        // 未登录 不能去交易相关的 pay paysuccess 不能去个人中心
        // 去home 、search、shopCart需要放行
        let toPath = to.path
        if (toPath.indexOf('/trade') != -1 || toPath.indexOf('/pay') != -1 || toPath.indexOf('/center') != -1) {
            // 把未登录的时候想去而没有去成的信息保存在地址栏中
            next('/login?redirect=' + toPath)
        } else {
            next()
        }
    }
    // next()
})
export default router